home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / icons+tools / iconian / sources / emodules / mod / monitor.e < prev    next >
Text File  |  1995-12-22  |  2KB  |  62 lines

  1. OPT MODULE
  2.  
  3. MODULE    'graphics/gfx','graphics/displayinfo'
  4.  
  5. EXPORT PROC findbestmode(musthavemask,mustnothavemask,width,height,depth,aspectx,aspecty,wantkey=0)
  6.     DEF lastid=-1,nextid:PTR TO displayinfo
  7.     DEF dim:PTR TO dimensioninfo
  8.     DEF dis:PTR TO displayinfo
  9.     DEF bestscore=0,bestid=-1
  10.     DEF score
  11.     DEF ax,ay,visw,vish
  12.  
  13.     dim:=New(1000)
  14.     dis:=New(1000)
  15.     REPEAT
  16.         nextid:=NextDisplayInfo(lastid)
  17.         IF (nextid>0)
  18.             score:=0
  19.             GetDisplayInfoData(0,dis,900,DTAG_DISP,nextid)
  20.             IF dis.notavailable=0
  21. ->WriteF('\n\z\h[8] \z\h[8]',nextid,dis.propertyflags)
  22.                 GetDisplayInfoData(0,dim,900,DTAG_DIMS,nextid)
  23. ->WriteF('  <\d[4],\d[4] \d[4],\d[4] \d[4],\d[4]> ',dim.maxoscan.minx,dim.maxoscan.miny,dim.maxoscan.maxx,dim.maxoscan.maxy,dim.maxoscan.maxx-dim.maxoscan.minx,dim.maxoscan.maxy-dim.maxoscan.miny)
  24.                 visw:=(dim.stdoscan.maxx-dim.stdoscan.minx)
  25.                 vish:=(dim.stdoscan.maxy-dim.stdoscan.miny)
  26. ->                score:=score+((visw-width)/100)
  27. ->                score:=score+((vish-height)/100)
  28. ->WriteF('\n!score=\d  ',score)                
  29. ->                score:=score+ (dim.stdoscan.maxx-dim.stdoscan.minx)/100
  30. ->                score:=score+ (dim.stdoscan.maxy-dim.stdoscan.miny)/100
  31.  
  32.                 IF (dim.stdoscan.maxx-dim.stdoscan.minx)=width THEN score:=score+500
  33.                 IF (dim.stdoscan.maxy-dim.stdoscan.miny)=height THEN score:=score+500
  34. ->WriteF('{\d,\d}',dis.resolution.x,dis.resolution.y)
  35.  
  36. ->WriteF('@score=\d  ',score)                
  37.                 IF (aspectx*100/aspecty)=(dis.resolution.x*100/dis.resolution.y) THEN score:=score+2000
  38. ->WriteF('#score=\d  ',score)                
  39.                 IF ((nextid AND wantkey)=wantkey) THEN score:=score+1001    -> Even if wantkey=0 then *all modes* get +100
  40. ->WriteF('$score=\d  ',score)                
  41.                 IF ((nextid AND musthavemask)<>musthavemask)
  42.                     score:=0
  43.                 ENDIF
  44.                 IF ((nextid AND mustnothavemask)<>0) THEN score:=0
  45.                 IF (dim.maxdepth<depth) THEN score:=0
  46.                 IF (dim.minrasterwidth>width) OR (dim.minrasterheight>height) THEN score:=0
  47.                 IF (dim.maxrasterwidth<width) OR (dim.maxrasterheight<height) THEN score:=0
  48.                 IF score>bestscore
  49.                     bestscore:=score
  50.                     bestid:=nextid
  51.                     ax:=dim.stdoscan.maxx-dim.stdoscan.minx
  52.                     ay:=dim.stdoscan.maxy-dim.stdoscan.miny
  53. ->WriteF('!!!!!!!!!!')
  54.                 ENDIF
  55.             ENDIF
  56.         ENDIF
  57.         lastid:=nextid
  58.     UNTIL (nextid=-1)
  59.     Dispose(dim)
  60.     Dispose(dis)
  61. ENDPROC bestid,ax,ay
  62.